import api from './api';
import { UserRole } from '@/types';

// 管理员接口
export interface Admin {
  id: string | number;
  username: string;
  name: string;
  role: UserRole;
  email: string;
  phone: string;
  avatar: string | null;
  enabled: boolean;
  createTime: string;
  updateTime: string | null;
}

// 分页响应接口
export interface PageResponse<T> {
  content: T[];
  pageable: {
    pageNumber: number;
    pageSize: number;
    sort: {
      empty: boolean;
      sorted: boolean;
      unsorted: boolean;
    };
    offset: number;
    paged: boolean;
    unpaged: boolean;
  };
  last: boolean;
  totalElements?: number;
  totalPages?: number;
  size?: number;
  number?: number;
  first?: boolean;
  numberOfElements?: number;
  empty?: boolean;
}

// 创建管理员请求参数
export interface CreateAdminRequest {
  username: string;
  name: string;
  email: string;
  phone: string;
  password: string;
}

// 更新管理员请求参数
export interface UpdateAdminRequest {
  username?: string;
  name?: string;
  email?: string;
  phone?: string;
  password?: string;
}

// 查询参数
export interface AdminQueryParams {
  page?: number;
  size?: number;
  keyword?: string;
}

/**
 * 获取管理员列表
 * @param params 查询参数
 * @returns 管理员列表分页数据
 */
export const getAdmins = async (params: AdminQueryParams = {}): Promise<PageResponse<Admin>> => {
  try {
    const { page = 0, size = 10, keyword = '' } = params;
    const response = await api.get('/admin/admins', {
      params: { page, size, keyword }
    });
    
    return response;
  } catch (error) {
    console.error('获取管理员列表失败:', error);
    throw error;
  }
};

/**
 * 获取管理员详情
 * @param id 管理员ID
 * @returns 管理员详情
 */
export const getAdmin = async (id: string | number): Promise<Admin> => {
  try {
    const response = await api.get(`/admin/admins/${id}`);
    return response;
  } catch (error) {
    console.error('获取管理员详情失败:', error);
    throw error;
  }
};

/**
 * 创建管理员
 * @param adminData 管理员数据
 * @returns 创建的管理员
 */
export const createAdmin = async (adminData: CreateAdminRequest): Promise<Admin> => {
  try {
    const response = await api.post('/admin/admins', adminData);
    return response;
  } catch (error) {
    console.error('创建管理员失败:', error);
    throw error;
  }
};

/**
 * 更新管理员
 * @param id 管理员ID
 * @param adminData 管理员数据
 * @returns 更新后的管理员
 */
export const updateAdmin = async (id: string | number, adminData: UpdateAdminRequest): Promise<Admin> => {
  try {
    const response = await api.put(`/admin/admins/${id}`, adminData);
    return response;
  } catch (error) {
    console.error('更新管理员失败:', error);
    throw error;
  }
};

/**
 * 删除管理员
 * @param id 管理员ID
 * @returns 是否成功
 */
export const deleteAdmin = async (id: string | number): Promise<boolean> => {
  try {
    await api.delete(`/admin/admins/${id}`);
    return true;
  } catch (error) {
    console.error('删除管理员失败:', error);
    throw error;
  }
};

/**
 * 更新管理员状态
 * @param id 管理员ID
 * @param enabled 是否启用
 * @returns 更新后的管理员
 */
export const updateAdminStatus = async (id: string | number, enabled: boolean): Promise<Admin> => {
  try {
    const response = await api.patch(`/admin/admins/${id}/status`, { enabled });
    return response;
  } catch (error) {
    console.error('更新管理员状态失败:', error);
    throw error;
  }
}; 